package model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import controller.EmpresaController;

import model.bean.ClienteBean;
import model.bean.EmpresaBean;

import Utils.StringUtil;

public class ClienteDAO {

	public static void insertCliente(ClienteBean cliente) {
		Connection conn = new MysqlConnect().connect();
		String sql = "INSERT INTO CLIENTE (NOME, CPF, EMAIL, TELEFONE) VALUES(?,?,?,?)";
		try {
			PreparedStatement stmt = conn.prepareStatement(sql);
			stmt.setString(1, cliente.getNome());
			stmt.setString(2, cliente.getCpf());
			stmt.setString(3, cliente.getEmail());
			stmt.setString(4, cliente.getTelefone());
			stmt.executeUpdate();
			conn.close();
		} catch (SQLException e) {
			System.out.println("Could not perform statement");
			e.printStackTrace();
		}
	}

	public static boolean updateEmpresa(int idEmpresa, int idCliente) {
		MysqlConnect mysql = new MysqlConnect();
		String sql = "UPDATE CLIENTE set idEmpresa = " + idEmpresa
				+ " WHERE idcliente = " + idCliente;
		System.out.println(sql);
		return mysql.executeUpdate(sql);
	}

	public static int getId(String cpf) {
		MysqlConnect mysql = new MysqlConnect();
		ResultSet rs = mysql.select("CLIENTE", "IDCLIENTE", "CPF = "
				+ StringUtil.quotedStr(cpf), "", "");
		int id = 0;
		try {
			while (rs.next()) {
				id = rs.getInt("idcliente");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return id;
	}

	public static ClienteBean getClientePorCpf(String cpf) {
		MysqlConnect mysql = new MysqlConnect();
		ResultSet rs = mysql.select("CLIENTE", "",
				"CPF = " + StringUtil.quotedStr(cpf), "", "");
		ClienteBean cliente = null;
		try {
			while (rs.next()) {
				int id = rs.getInt("idcliente");
				String nome = rs.getString("nome");
				String email = rs.getString("email");
				String clienteCpf = rs.getString("cpf");
				String telefone = rs.getString("telefone");
				cliente = new ClienteBean(nome, clienteCpf, email, telefone);
				cliente.setIdCliente(id); 
				int empresaId = rs.getInt("idEmpresa");
				EmpresaBean empresa = EmpresaController.getEmpresaPorId(empresaId);
				cliente.setEmpresa(empresa);
				return cliente;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			mysql.desconnect();
		}
		return cliente;
	}
	
	public static ClienteBean getClientePorId(int id) {
		MysqlConnect mysql = new MysqlConnect();
		ResultSet rs = mysql.select("CLIENTE", "",
				"idcliente = " + id, "", "");
		ClienteBean cliente = null;
		try {
			while (rs.next()) {
				String nome = rs.getString("nome");
				String email = rs.getString("email");
				String clienteCpf = rs.getString("cpf");
				String telefone = rs.getString("telefone");
				cliente = new ClienteBean(nome, clienteCpf, email, telefone);
				cliente.setIdCliente(id); 
				int empresaId = rs.getInt("idempresa");
				EmpresaBean empresa = EmpresaController.getEmpresaPorId(empresaId);
				if(empresa != null) cliente.setEmpresa(empresa);
				return cliente;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			mysql.desconnect();
		}
		return cliente;
	}
	
	public static ArrayList<Object> pesquisarCliente(String nome, String cpf, String email) {
		StringBuilder where = new StringBuilder();
		if (!nome.isEmpty()) {
			where.append("NOME like " + "'%" + nome + "%'");
		}

		if (!cpf.isEmpty()) {
			if (!nome.isEmpty()) {
				where.append("AND CPF = " + StringUtil.quotedStr(cpf));
			} else {
				where.append("CPF = " + StringUtil.quotedStr(cpf));
			}
		}

		if (!email.isEmpty()) {
			if (!nome.isEmpty() || !cpf.isEmpty()) {
				where.append("AND EMAIL = " + StringUtil.quotedStr(email));
			} else {
				where.append("EMAIL = " + StringUtil.quotedStr(email));
			}
		}

		MysqlConnect mysql = new MysqlConnect();

		ResultSet rs = mysql.select("CLIENTE", "",
				where.toString(), "", "idcliente");

		ArrayList<ClienteBean> clientes = null;

		ArrayList<Object> tabelaCliente = new ArrayList<Object>();

		try {
			clientes = new ArrayList<ClienteBean>();
			while (rs.next()) {
				int id = rs.getInt("idcliente");
				String nomeCliente = rs.getString("nome");
				String emailCliente = rs.getString("email");
				String clienteCpf = rs.getString("cpf");
				String telefone = rs.getString("telefone");
				int idEmpresa = rs.getInt("idempresa");
				EmpresaBean empresa = EmpresaController.getEmpresaPorId(idEmpresa);
				ClienteBean cliente = new ClienteBean(nomeCliente, clienteCpf, emailCliente, telefone);
				cliente.setIdCliente(id);
				if(empresa != null){
					cliente.setEmpresa(empresa);
				}
				clientes.add(cliente);
			}

			for (ClienteBean c : clientes) {
				Object dados = null;
				if(c.getEmpresa() != null){
					dados = new Object[] {
							c.getIdCliente(), c.getNome(), c.getCpf(), c.getEmail(),
							c.getTelefone(), c.getEmpresa().getRazaoSocial()
					};
				}else{
					dados = new Object[] {
							c.getIdCliente(), c.getNome(), c.getCpf(), c.getEmail(),
							c.getTelefone(), ""
					};
				}
				tabelaCliente.add(dados);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return tabelaCliente;
	}
	public static boolean updateCliente(ClienteBean cliente){
		MysqlConnect mysql = new MysqlConnect();
		StringBuilder str = new StringBuilder();
		str.append("NOME = " + StringUtil.quotedStr(cliente.getNome()));
		str.append(",");
		str.append("CPF = " + StringUtil.quotedStr(cliente.getCpf()));
		str.append(",");
		str.append("EMAIL = " + StringUtil.quotedStr(cliente.getEmail()));
		str.append(",");
		str.append("TELEFONE = " + StringUtil.quotedStr(cliente.getTelefone()));
		if(cliente.getEmpresa() != null){
			str.append(",");
			str.append("IDEMPRESA = " + cliente.getEmpresa().getIdEmpresa());
		}
		return mysql.update("CLIENTE", str.toString(), "idcliente = " + cliente.getIdCliente());
	}

}
